package issr.market.db;

import issr.market.model.ErogazioneProdotto;
import issr.market.model.Lotto;
import issr.market.model.Prodotto;
import issr.market.model.Utente;

import java.util.List;
import java.util.Map;

import org.hibernate.Session;

public interface DBController {
	
	
	public static final String COUNT_UTENTI_QUERY = "Select count(*) from utenti";
	public static final String INSERT_UTENTE_QUERY = "Insert into utenti(nomeUtente,login,password,email,telefono,ruolo)"+
			 										 " values(?,?,?,?,?,?)";
	
	
	public Session getSession();
	
	public boolean isEmptyUserDB();
	
	//Gestione Utente
	public void creaNuovoUtente(String nome, String login, String password,	String email, String telefono, String ruolo, Long dataRegistrazione, Long scadenzaRegistrazione, Long scadenzaPassword);
	public void modificaUtente(int id, String nome, String login, String password,	String email, String telefono, String ruolo, Long scadenzaRegistrazione, Long scadenzaPassword);
	public void eliminaUtenti(List<String> idUtenti);
	
	public Utente loginUtente(String login, String password);
	public List<Utente> getUtenti(String sortingField);
	
	//Gestione Prodotti
	public boolean inserisciNuovaTipologiaProdotti(List<Prodotto> prodotti);
	public Lotto depositoLotto(String idLotto, String idProdotto, Long dataConsegna, Long dataScadenza, int quantitaProdotti, int stato);
	public List<Lotto> approvaLotti();
	public void eliminaLotti(String[] idLotti);
	
	public List<Prodotto> getProdotti();
	
	public List<Lotto> getLottiByStato(int stato);
	public List<Lotto> getProdottiRestituibili(String[] idProdotti);
	public Map<String,List<Lotto>> getProdottiErogazione(String[] idProdotti);
	public int updateQuantitaProdotti(ErogazioneProdotto eProd, boolean subtract);
	public List<Lotto> updateStatoLotti(List<String> idLotti, int stato);
	
	public List<Prodotto> getProdottiDaOrdinare();
	public boolean aggiornaStatoProdotti(List<Prodotto> prodotti, int stato);
	public boolean aggiornaStatoProdotto(String idProdotti, int stato);
	
	//Gestione Ricevute
	public void insertRicevuta(String idRicevuta, Long dataEmissione, double prezzoTotale);
	public boolean checkRicevuta(String idRicevuta);
	
	public boolean aggiornaTabellaIndici(String idProdotto, Map<String, Integer> indiciMap);
	public boolean aggiornaIndice(String idProdotto, String indexKey, Integer value);
	
	
}
